// 华为软挑2022 EO团队代码
// 廖绍辉、朱波、崔龙
// 20220318-20220325
// 二次规划，qudprog求解
// 1.暴力解可以跑通cost约19万。
// 2.二次规划跑出结果，满足等式约束和不等式约束，成本比暴力解的成本更低
//   但是输出到solution.txt的结果还需修正，因为quadprog是double，最后等式约束是大于等于，需要减去大于的部分。
//   对于官方初赛的线下数据集，成本是这么多。
//   rows break: 0 cols break: 0
//   cost = 182761


#include "parameter.h"
#include "read_write.h"
#include "solver.h"

class PsoSolver pso_solver;

int main() {
    // 读取数据
    cin.clear();
    class ReadWriteClass RW;
    RW.read_data();

    // 初始解
    class PolicySolver pol_solver;
    pol_solver.init(RW.qos, RW.demand, RW.site_bandwidth,
            RW.qos_constraint, RW.T_name, RW.client_name,
            RW.server_name,RW.client_name2idx, RW.server_name2idx);
    pol_solver.greedy_policy();

    // PSO优化
    pso_solver.init(RW.qos, RW.demand, RW.site_bandwidth,
                    RW.qos_constraint, RW.T_name, RW.client_name,
                    RW.server_name, pol_solver.table);
//    pso_solver.pso_optimize();
    pso_solver.qp_optimize();
    // 输出结果
//    vector<string> ans = pol_solver.ans;
    vector<string> ans = pso_solver.get_answer();
    RW.write_answer(ans);
    return 0;
}

